home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 May / CMCD0504.ISO / Software / Freeware / Programare / gdiplusdelphi / demos / Using Image Encoders and Decoders / Determining the Parameters Supported by an Encoder / Using the EncoderValue Enumeration / Unit1.pas < prev   
Encoding:
Pascal/Delphi Source File  |  2002-02-15  |  2.5 KB  |  84 lines

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, ComObj;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Memo1: TMemo;
  12.     procedure FormCreate(Sender: TObject);
  13.   private
  14.     { Private declarations }
  15.   public
  16.     { Public declarations }
  17.   end;
  18.  
  19. var
  20.   Form1: TForm1;
  21.  
  22. implementation
  23.  
  24. uses GDIPAPI, GDIPOBJ, GDIPUTIL;
  25.  
  26. {$R *.dfm}
  27.  
  28. procedure TForm1.FormCreate(Sender: TObject);
  29. var
  30.   Bitmap: TGPBitmap;
  31.   encoderClsid: TGUID;
  32.   listSize: UINT;
  33.   EncoderParameters: PEncoderParameters;
  34.   strGuid: String;
  35.   j: Integer;
  36. type
  37.   ArrEncParam = array of TEncoderParameter;
  38.   ArrULONG = array of ULONG;
  39. begin
  40.    // Create a Bitmap (inherited from Image) object so that we can call
  41.    // GetParameterListSize and GetParameterList.
  42.    Bitmap:= TGPBitmap.Create(1,1, PixelFormat32bppARGB);
  43.  
  44.    // Get the JPEG encoder CLSID.
  45.    GetEncoderClsid('image/jpeg', encoderClsid);
  46.  
  47.    // How big (in bytes) is the JPEG encoder's parameter list?
  48.    listSize := bitmap.GetEncoderParameterListSize(encoderClsid);
  49.    memo1.Lines.Add(format('The parameter list requires %d bytes.', [listSize]));
  50.  
  51.    // Allocate a buffer large enough to hold the parameter list.
  52.    getmem(EncoderParameters, listSize);
  53.  
  54.    // Get the parameter list for the JPEG encoder.
  55.    bitmap.GetEncoderParameterList(encoderClsid, listSize, EncoderParameters);
  56.  
  57.    // pEncoderParameters points to an EncoderParameters object, which
  58.    // has a Count member and an array of EncoderParameter objects.
  59.    // How many EncoderParameter objects are in the array?
  60.    memo1.Lines.Add(format('There are %d EncoderParameter objects in the array.',
  61.       [EncoderParameters.Count]));
  62.  
  63.    // Look at the first (index 0) EncoderParameter object in the array.
  64.    Memo1.Lines.Add('Parameter[0]');
  65.  
  66.    strGuid :=  GUIDToString(ArrEncParam(@EncoderParameters.Parameter)[0].Guid);
  67.    memo1.Lines.Add(format('   The guid is %s.', [strGuid]));
  68.  
  69.    memo1.Lines.Add(format('   The data type is %s.',
  70.       [ValueTypeFromULONG(ArrEncParam(@EncoderParameters.Parameter)[0].Type_)]));
  71.  
  72.    memo1.Lines.Add(format('   The number of values is %d.',
  73.       [ArrEncParam(@EncoderParameters.Parameter)[0].NumberOfValues]));
  74.  
  75.    memo1.Lines.Add('   The allowable values are');
  76.    for j := 0 to ArrEncParam(@EncoderParameters.Parameter)[0].NumberOfValues - 1 do
  77.      memo1.Lines.Add(inttostr(ArrULONG(ArrEncParam(@EncoderParameters.Parameter)[0].Value)[j]));
  78.  
  79.    freemem(EncoderParameters, listSize);
  80.    bitmap.Free;
  81. end;
  82.  
  83. end.
  84.